import request from '@/utils/request'

// 定义枚举类型（与后端一致）
export enum Gender {
  MALE = 1,
  FEMALE = 2,
}

export enum DegreeType {
  JUNIOR = 1, // 初中
  HIGH_SCHOOL = 2, // 高中
  COLLEGE = 3, // 大专
  BACHELOR = 4, // 本科
  MASTER = 5, // 硕士
  DOCTOR = 6, // 博士
}

export enum CollegeFlag {
  NOT_COLLEGE = 0,
  IS_COLLEGE = 1,
}

// 学生实体接口（匹配后端返回的JSON字段名）
export interface StudentModel {
  id: number
  name: string
  no: string
  gender: Gender
  phone: string
  idCard: string // 注意后端返回的是驼峰命名
  isCollege: CollegeFlag
  address?: string | null
  degree?: DegreeType | null
  graduationDate?: string | null // ISO 8601格式日期字符串
  clazzId: number
  violationCount: number
  violationScore: number
  createTime?: string // ISO 8601格式日期时间字符串
  updateTime?: string // ISO 8601格式日期时间字符串
  clazzName?: string | null // 分页查询时返回的班级名称
}

// 学生查询参数接口
export interface StudentQueryParams {
  clazzId?: number | null
  degree?: DegreeType | null
  name?: string | null
  page: number
  pageSize: number
}

// 违纪处理参数接口
export interface ViolationHandleParams {
  id: number
  score: number
}

// 删除参数接口
export interface DeleteParams {
  ids: number[] // 数组形式接收
}

// 统一响应结果接口（泛型增强）
export interface ResultModel<T = any> {
  code: number
  msg: string
  data: T
}

// 分页结果接口
export interface PageModel<T = any> {
  total: number
  rows: T[]
}

// 分页响应结果接口
export interface PageResultModel<T = any> extends ResultModel<PageModel<T>> {}

// 单学生响应结果接口
export interface StudentResultModel extends ResultModel<StudentModel> {}

// API 函数类型定义 -------------------------------------------------

// 分页条件查询
export const queryPageApi = (
  params: StudentQueryParams,
): Promise<PageResultModel<StudentModel>> => {
  const { clazzId, degree, name, page, pageSize } = params

  // 构建查询字符串（处理可选参数）
  const queryParams = new URLSearchParams()
  if (clazzId) queryParams.append('clazzId', clazzId.toString())
  if (degree) queryParams.append('degree', degree.toString())
  if (name) queryParams.append('name', name)
  queryParams.append('page', page.toString())
  queryParams.append('pageSize', pageSize.toString())

  return request.get(`/students?${queryParams.toString()}`)
}

// 新增班级模型
export interface ClazzModel {
  id: number
  name: string
}

// 新增学生
export const addApi = (stu: Omit<StudentModel, 'id' | 'clazzName'>): Promise<ResultModel<number>> =>
  request.post('/students', stu)

// 根据ID查询学生
export const queryInfoApi = (id: number): Promise<StudentResultModel> =>
  request.get(`/students/${id}`)

// 修改学生
export const updateApi = (stu: StudentModel): Promise<ResultModel> => request.put(`/students`, stu)

// 删除学生（注意后端接收的是路径参数）
export const deleteApi = (ids: number[]): Promise<ResultModel> => {
  // 将数组转换为逗号分隔的字符串，如 "1,2,3"
  const idsString = ids.join(',')
  return request.delete(`/students/${idsString}`)
}

// 违纪处理
export const handleViolationApi = (params: ViolationHandleParams): Promise<ResultModel> =>
  request.put(`/students/violation/${params.id}/${params.score}`)

// 新增班级列表查询API
export const queryClazzListApi = (): Promise<ResultModel<ClazzModel[]>> => {
  return request.get('/clazzs/list')
}
